前言

js进行事件处理的写法非常重要, 好的写法可以使代码松耦合, 从而容易维护和测试. 下面我们通过改写一个实际案例来探讨如何绑定事件处理函数.

案例分析

坏的写法

function handleClick(event){
  var popup = document.getElementById('popup');
  popup.style.left = event.clientX + 'px';
  popup.style.top = event.clientY + 'px';
  popup.className = 'reveal';
  addListener(element,'click',handleClick)
}

改进一

分析: 上段代卖的第一个问题是事件处理程序包含了应用逻辑. 应用逻辑是和应用相关的功能性代码, 而不是用户行为相关的. 应用逻辑从所有事件处理程序中抽离出来的做法是一种最佳实践, 这样做有两个好处. 1,一个应用逻辑能对应多个事件处理,避免代码重复. 2, 可以对应用逻辑进行单独测试.

var MyApplication = {
  //事件处理
  handleClick: function(event){
    this.showPopup(event)
  },
  //应用逻辑
  showPopup: function(event){
    var popup = document.getElementById('popup')
    popup.style.left = event.clientX + 'px'
    popup.style.top = event.clientY + 'px';
    popup.className = 'reveal';
  }
}
addListener(element,'click',function(event){
  MyApplication.handleClick(event)
})

改进二

分析: 上面这段代码已经很好了, 但是还有不足之处, 那就是应用逻辑依赖于事件对象. 这样做有两个坏处, 1, 好的API对于接收的参数是清晰明确的, 将event对象作为参数非常含糊, 不能告诉你event的哪些属性是需要用到的. 2. 不利于测试, 当你需要进行测试时, 必须构建要给event对象传递给应用逻辑.

最佳实践: 让事件处理程序使用event对象来处理事件, 然后拿到所有需要的数据传给应用逻辑. 最好是只让事件处理程序接触event对象, 并做事件相关的操作. 包括阻止默认事件火阻止事件冒泡等.

var MyApplication = {
  //事件处理程序是唯一接触event对象,并进行事件相关操作
  handleClick: function(event){
    //加入事件的额外操作
    event.preventDefault()
    event.stopPropagation()
    this.showPopup(event.clientX,event.clientY)
  },
  //应用逻辑的参数要明确,进一步解耦
  showPopup: function(x,y){
    var popup = document.getElementById('popup')
    popup.style.left = x + 'px'
    popup.style.top = y + 'px';
    popup.className = 'reveal';
  }
}
addListener(element,'click',function(event){
  MyApplication.handleClick(event)
})

结尾

改进二后的成型代码就是我们需要的最佳实践, 如果能坚持这样写, 可以更好的维护代码和测试. 奥利干!!!

THE END
推荐文章
  • 怎么把微信聊天迁移到电脑上

  • docker删除未使用到的镜像

  • 解决wordpress中自定义类型或page类型的分页查询404问题

  • QQ邮箱开启SMTP

  • VSCode中如何通过文件名快速找到这个文件

  • 部署或移植网站的步骤

  • 申请腾讯企业邮箱

  • 查看个人小程序的累计独立访客(UV)

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字